메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

IT/모바일

리눅스 네트워크 관리: 동적 주소 할당

한빛미디어

|

2001-07-10

|

by HANBIT

13,383

by 테리 도슨(Terry Dawson), 역 한빛 리포터 1기 서성용 많은 네트워크에서 IP 주소는 호스트에 수동으로 할당된다. 대부분의 호스트에서 IP 주소가 불필요하고 심지어는 바람직하지 못한 데에는 여러 이유가 있다. 이 칼럼에서 이더넷 같은 브로드캐스트 형식의 네트워크에 접속된 호스트를 위하여 리눅스 환경에서 어떻게 IP 주소를 자동으로 할당하는지(그리고 다른 유용한 정보들)를 설명할 것이다. 편의를 위해서, 이러한 네트워크들은 이더넷으로 간주하겠다. 하지만 같은 원칙이 FDDI, Token Ring, 그리고 AX.25 같은 다른 방식에도 적용된다. 동적 할당의 장점은 무엇인가? 동적 IP 주소 할당이 이익을 제공하는 경우는 여러 가지 상황이 있다. 이 경우 중 보다 중요한 것 몇 가지는 다음과 같다. 디스크가 없는 워크스테이션 이것은 동적 주소할당의 최초 표준을 구현하게 만든 사용 대상이다. 디스크 없는 워크스테이션은 전형적으로 설정 데이터를 저장하지 않는다. 그 대신에 부팅하면서 네트워크 연결에 설정 데이터를 요청한다. 매우 중요한 설정 요소 하나는 IP 주소인데, 이것은 운영체제를 내려받기 위해서 사용해야 한다. 이동식 호스트 랩탑 소유자라면, 이동할 때마다 네트워크 설정을 수동으로 재설정해야만 하는 불편함을 이해할 것이다. 예를 들어서 집에 있는 도킹 스테이션으로부터 직장에 있는 도킹 스테이션으로 이동하는 동안 GPRS 기반의 이동전화에 접속하는 경우 말이다. 동적 주소 할당은 새로운 네트워크에 접속할 때마다 사용자를 위해서 저급(low-level)의 네트워크 설정을 자동화해준다. IP 주소 공간의 "초과 예약(overbooking)" 허용 IP 주소는 부족한 자원이다. 만약 사용자의 네트워크에 여러 대의 잠재적인 호스트가 있으나 실제 점유율은 전체의 수보다 매우 낮을 경우에, 동적 할당은 매우 많은 수의 잠재적인 호스트를 지원하는 데 필요한 IP 주소의 수를 효율적으로 관리할 수 있도록 한다. 인터넷 서비스 제공자들(ISP)은 보통 매우 작은 수의 IP 주소 풀(pool)로 매우 많은 수의 고객을 지원한다. 이것은 때때로 "overbooking"이라 불린다. 전화 접속 모뎀, ADSL, 케이블 모뎀과 기술들은 이러한 기법을 이용하는 네트워크 기술의 중요한 예라고 할 수 있다. 문서화와 중복 IP 주소 충돌의 감소 수동으로 정적 IP 주소를 호스트에 할당하는 것은 중복 IP 주소 문제를 막기 위해 정확한 최신의 문서를 필요로 한다. 거의 모든 동적 주소 할당 체계는 로그와 보고 기능을 가지고 있는데, 이것은 IP 주소 할당 과정의 대부분을 스스로 문서화 하도록 만든다. 사용자가 야기하는 과실의 감소 사무 환경에서, 사용자의 데스크탑 컴퓨터를 지원하기 위한 하나 이상의 IP 네트워크를 갖는 것이 보통이다. 사용자들이 이 책상에서 저 책상으로 이동하는 것은 흔한 일이고, 이동할 때마다 자신의 컴퓨터를 같이 옮기는 것이 타당하다고 흔히 생각한다. 불행히도 그들이 하나의 IP 네트워크를 지원하는 이더넷 포트가 있는 한 책상에서 동일하게 보이는 다른 IP 네트워크를 지원하는 이더넷 포트로 이동할 경우, 컴퓨터는 올바르게 작동하기 위해 재설정되어야 한다. 필연적으로 이것은 IT 헬프 데스크로 전화를 걸어, 누군가에게 "와서 내 PC를 고쳐주세요"하는 부탁을 하게 한다. 동적 IP 주소 할당은 처음 부팅시 새로운 네트워크에서 새로운 주소를 제공함으로써 이러한 상황에 훌륭하게 대처할 수 있다. 새로운 책상에서 일을 하기 위해 직접 해줘야 할 중간 작업을 완전히 피하면서도 말이다. 서버의 부적절한 설정을 방지 동적 주소 할당은 사용자 데스크탑 컴퓨터에 있는 애플리케이션 서버들의 부적절한 설정을 방지하는 데 도움을 줄 수 있다. 대부분의 애플리케이션 서버들은 사용자에게 접속하기 위해서 서버 머신의 IP 주소를 알 것을 요구한다. IP 주소를 사용자의 데스크탑 컴퓨터에서 주기적으로 바꾸는 것은 그러한 유형의 서버를 데스크탑에서 실행하려는 시도를 어렵도록 만든다. 그것은 단지 어려움이며 극복할 수 없는 문제가 아님에 주목해야 한다. 동적 DNS 서버 기술은 특히 이러한 문제를 극복하기 위해 존재하며, 어떤 애플리케이션 서버들은 디렉토리 서비스나 다른 기법을 이용하여 그들의 존재, 그리고 어느 주소에서 그들을 이용 가능한지를 알린다. 이 경우 IP 주소는 무의미하다. 동적 주소 할당이 부적절한 경우는 언제인가? 동적 주소 할당이 항상 좋은 것은 아니다. 부적절한 상황도 많이 있고, 관리를 복잡하게 만드는 경우도 있다. 인증의 일부로 IP를 사용하는 애플리케이션 서비스 어떤 애플리케이션 서비스는 클라이언트의 소스 IP 주소를 클라이언트 인증의 한 요소로 사용한다. NFS(네트워크 파일 서비스)는 클라이언트 머신의 IP 주소에 기반을 두고 접근 권한을 구분하는 것을 허용한다. 그래서 한 네트워크에 있는 모든 호스트는 읽기 전용의 권한을 가지고, 선택된 특정 호스트는 읽기/쓰기 권한을 가질 수도 있다. 이런 기법을 작동하고 싶다면 분명히 클라이언트 머신에서 IP 주소를 바꾸는 것을 원치 않을 것이다. NFS만이 이런 것이 아니라, TCP 래퍼(wrapper) 데몬과 그것을 이용하는 어떠한 애플리케이션이라도 고정 주소를 필요로 할 것이다. ssh(secure shell service) 역시 호스트에 세션을 열어주는 데 필요한 인증 자격의 일부분으로서 IP 주소에 의존할 수 있다. 호스트 주소에 의한 IP 필터링/NAT/account의 작동 불가능 보통 어떤 IP 필터링이나 NAT(Network Address Translation) 규칙은 전체 IP 네트워크에 적용되지만, 때때로 특정 호스트들이 방화벽에 특별한 구멍을 내는 것을 허용하게 하고 싶을 것이다. 만약 이렇게 하고 싶다면 당연히 그 호스트가 항상 같은 IP 주소를 갖는 것이 중요하다. 만약 네트워크의 트래픽 분산을 분석하기 위해서 IP accounting 기법을 사용하고 있다면, 이와 유사하게 대용량의 (트래픽을 가진) 호스트들이 항상 같은 주소를 가져야 가장 유용한 결과가 될 것이다. 어떤 서비스는 속임수 없이는 제대로 동작하지 않는다. 어떤 애플리케이션 서비스들은 거의 전적으로 정적으로 할당된 IP 주소에 의존한다. 이의 예제는 SMTP(Simple Mail Transfer Protocol), 그리고 "talk" 서비스가 있다. 동적 DNS를 활용하면 이러한 환경에서 SMTP의 수고를 감소시키는 데 도움이 된다. 그러나 일반적으로는 이를 피하고 사용자들이 IMAP(Internet Mail Access Protocol)이나 POP(Post Office Protocol) 같은 프로토콜을 사용해서 고정 IP를 가진 중앙의 서버로부터 메일을 받는다. "talk" 프로그램과 프로토콜은 IP 주소와 그것들과 관련된 호스트 이름에 성가실 정도로 까다롭기 때문에, 다시 다른 것으로 대체하는 것이 적절한 방법이다. 대신에 개방된 인스턴트 메시징 시스템 중 하나를 사용하자. 문제 탐지가 보다 어려울 수 있다. 만약 네트워크에서 잘못된 행동을 추적하고 있다면, 동적 IP 주소 할당은 오작동하는 머신을 확인하는 작업을 훨씬 어렵게 만들 수 있다. 하나의 머신을 확인하기 위해 이더넷 주소에 의존해야 하고, 쉽게 기억되지 않을 뿐더러 자주 기록되지도 않는다. 어떤 프로토콜이 존재하고, 어떻게 동작하는가? 이더넷 네트워크에 대해 동적 IP 주소 할당을 관리하는 잘 알려진 세 가지 프로토콜이 있다. 각각에 대한 간단한 설명을 보자. 각 프로토콜에 대한 자세한 설명을 보려면, 각각의 RFC 문서를 참조하자. 세 프로토콜 모두 관련되어 있고, 혁명적인 개발과 창의의 훌륭한 연구를 만들어 낸다. Reverse Address Resolution Protocol "RARP" (RFC-903) Reverse Address Resolution Protocol (RARP)는 Address Resolution Protocol(ARP)과 보완 관계이며, 디스크가 없는 워크스테이션을 고려해서 특별히 설계되었다. ARP 프로토콜은 특정 IP 주소와 관련된 하드웨어 주소를 알아내려는 호스트에서 사용한다. RARP 프로토콜은 반대로 작동하는데, 사용자의 하드웨어 주소를 알고 있는 호스트가 같은 네트워크에 있는 RARP 서버에 특별히 공식화된 브로드캐스트 쿼리를 전달함으로써 이의 IP 주소를 알 수 있도록 한다. RARP 서버가 그러한 요청을 받으면, 요청한 호스트의 하드웨어 주소와 관계된 IP 주소를 찾으려 데이터베이스를 검색하고, 요청자에게 직접 응답하면서, 그 호스트가 사용해야 하는 IP 주소를 제공한다. 이것이 RARP 프로토콜의 범위이다. 불행히도 많은 경우에 호스트는 부팅되어 작동하기 위해서 자신의 IP 주소보다 많은 것을 알아야 한다. RARP 는 더 이상 흔하게는 사용되지 않지만, 때때로 여전히 유용하다. 특별히 썬 워크스테이션에 리눅스를 설치하고 있다면. 클라이언트와 서버 모두 리눅스 구현들이 존재한다. 소프트웨어와 함께 제공되는 맨 페이지에서 어떻게 사용하는지 매우 잘 설명하고 있다. Bootstrap Protocol "BootP", (RFC-951) Bootstrap Protocol은 RARP가 등장한 후 얼마 지나지 않아 나타났고, 두 가지 중요한 제한을 처리한다. 첫째, 하드웨어 계층의 프로토콜에 기반을 두었다기 보다는, 완전히 UDP/IP 기반이다. 그래서 구현하기가 다소 쉽다. BootP 트랜잭션은 클라이언트 호스트가 사용해야 하는 IP 주소 이상의 것을 공급한다. 그것은 추가로 부트 파일의 주소와 부트 파일을 받아와야 할 서버 주소를 제공한다. BootP는 매우 간단하다. 클라이언트 호스트는 "bootrequest" 메시지를 만든다. 이 메시지에는 자신의 하드웨어 주소가 있다. 그것은 소스 포트가 68번이고 도착 포트가 67번인 UDP/IP datagram의 형식에 담아 메시지를 네트워크로 전송한다. 만약 클라이언트가 BootP 서버의 주소를 알고 있다면, 서버의 주소를 IP 목적지 주소 항목에 넣는다. 그렇지 않은 경우에는 브로드캐스트 주소 255.255.255.255(참조: RFC-919)를 사용한다. BootP 서버가 "bootrequest" 메시지를 받으면 사용자의 로컬 데이터베이스를 참조하여 제공된 하드웨어 주소에 매핑된 IP 주소를 찾는다. 짝이 발견되면, BootP 서버는 할당된 IP 주소가 있는 "bootreply" 메시지를 공식화하여 IP 브로드캐스트 주소에 응답을 전송한다. BootP는 "bootreply" 메시지에 업체의 특수정보를 위한 공간을 제공한다. 이 기법은 다른 설정 정보와 데이터의 범위를 요청하는 호스트에 제공할 수 있다. RFC-1497, "BOOTP Vendor Information Extension"는 이것이 어떻게 작동하는지 자세히 설명하고 가능한 설정 데이터의 넓은 범위를 코딩하는 것을 정의한다. 지금으로서는 리눅스에서 이용 가능한 BootP 구현들이 직접적인 키워드 지원을 제공함으로써 이 수준에서 다뤄야 하는 고통에서 당신을 구해준다는 정도만 알아두자. Dynamic Host Configuration Protocol "DHCP" (RFC-2131) DHCP는 BootP의 성공에 힘입어 광범위한 설정 데이터를 가진 IP 주소 할당에 대한 기법을 정의함으로써 그것을 확장한다. DHCP는 BootP와 이전 버전과의 호환성을 설명하며, BootP 클라이언는 재설정 없이도 DHCP 서버를 효율적으로 이용할 수 있다. DHCP 서버는 많은 라우터에서 제공하는 BootP 중계 기법을 이용할 수 있다. DHCP는 IP 주소 할당의 세 가지 유형을 설명한다. 동적 할당 호스트는 주소를 요청하고 현재 할당되지 않은 주소 중 하나를 임의로 할당 받는다. 호스트는 각각의 요청시마다 다른 주소를 할당 받을 수도 있다. 자동 할당 호스트가 처음으로 주소를 요청할 때, 할당되지 않은 주소를 발견해서 배정한다. 그러면 그 주소는 그 호스트에서 사용을 예약하고, 그 호스트에서 요청이 있을 때마다 같은 주소가 배정된다. 정적 할당 이것은 "자동 할당"과 같지만, 할당되는 주소가 네트워크 관리자에 의해 그 호스트에 특별히 예약이 되어 있다는 점만 다르다. 호스트는 여전히 DHCP를 이용해 요청하고 그것의 주소를 자동으로 받아 오지만, 누구나 어떤 주소를 가질지 미리 알고 있다. DHCP가 도입한 중요한 개념은 하나의 주소에 대한 "lease" 시간의 고안이다. DHCP 클라이언트는 일정 시간 동안 주소를 요청할 수 있고, DHCP 서버는 그 주소를 그 시간 안에는 다른 호스트에게 재배정하지 않을 것을 보장한다. 물론 클라이언트는 대여가 경과하면 주소에 대해 또 다른 dcjd을 한다. 그리고 DHCP 서버는 이 경우에 같은 주소를 재할당하려고 할 것이다. 리눅스 시스템에서 가장 흔하게 발견되는 DHCP 구현은 Internet Software Consortium에서 만든 것이다. 그것은 미리 패키지되어 거의 모든 리눅스 배포판에서 바로 사용할 수 있을 것이다. DHCP는 분명히 가장 흔하게 사용되는 동적 주소 할당 기법인데, 거의 모든 데스크탑 머신에서 지원하는 것처럼, 많은 ADSL과 케이블 모뎀 제공자들도 이를 사용한다. DHCP 데몬 설정하기 이제 설정을 시작해 보자. 첫째로, 몇 가지 가정이 있다.
  • ISC의 DHCP 데몬 프로그램이 DHCP 서버로 사용하고 싶어하는 호스트에 설치되어 있고, 그 호스트는 잘 동작하는 네트워크 설정을 갖고 있다.
  • DHCP 호스트는 주소를 관리하고자 하는 호스트와 같은 네트워크에 물려 있다. (DHCP 서버는 여러 장의 이더넷 카드를 가질 수 있고 여러 개의 네트워크에 동시에 접속되어 서브할 수 있다.)
  • 네트워크는 24 비트 접두어(prefix)를 가진 두 개의 서브넷 196.168.1.0과 192.168.2.0을 가지고 있다. 각각에서 우리는 .32-.254의 범위의 주소를 호스트에 동적으로 할당할 것이다. 나머지 주소들은 애플리케이션 서버, 라우터, 그리고 기타 공유 인프라스트럭처에서 사용이 예약돼 있다.
  • 각각의 네트워크는 .1로 끝나는 라우터 포트를 가지고 있다.
  • 모든 호스트는 testnet.net 도메인에서 이름을 배정 받을 것이고, 공유되는 네임 서버가 있는데 주소는 192.168.2.16 이다.
  • 기본적인 lease 시간은 10분이고, 호스트가 원한다면 2시간까지 요청할 수 있다.
ISC DHCP 데몬 설정 파일은 /etc/dhcpd.conf 이고 두 종류의 문(statement)이 있는데, 매개 변수 문과 선언 문이다. 매개 변수 문은 lease 시간과 같은 여러 개의 DHCP 변수, 게이트웨이 주소 같은 클라이언트 호스트에 제공해야 할 데이터를 위한 값을 제공한다. 선언 문은 관리해야 할 호스트의 집합과 호스트에 제공되는 매개 변수 문의 집합을 설명하기 위해 사용된다. 매개 변수 문은 선언 문 밖에 나타날 수 있으며 이 경우엔 전역 매개 변수로 간주된다. 선언 문 안에 있을 경우엔 그 선언에 의해 설명되는 호스트에만 적용된다. 매개 변수 문은 ; 문자로 끝나고 선언 문은 중괄호 {} 문자로 끝난다. 매우 복잡한 설정을 만들 수도 있지만, 대부분의 경우 간단한 것만 있어도 된다. 위에서 설명한 네트워크의 요구조건을 충족시키는 설정파일은 다음과 같다.

# dhcpd.conf - 간단한 네트워크를 위한 설정
# 기본 전역 설정
option domain-name "testnet.net";
option domain-name-servers 192.168.2.16;
option subnet-mask 255.255.255.0
default-lease-time 600;
max-lease-time 7200;

# .1 서브넷에는 DHCP 나 BootP를 이용하여 요청하는
# 어떤 호스트든 주소를 동적으로 할당한다.
subnet 192.168.1.0 netmask 255.255.255.0 {
  range dynamic-bootp 192.168.1.32 192.168.1.254;
  option broadcast-address 192.168.1.255;
  option routers 192.168.1.1;
  get-lease-hostnames true;
}

# .2 서브넷에는 고정된 주소를 가진 호스트의 집합과
# 동적 할당된 주소의 집합이 있다.
subnet 192.168.2.0 netmask 255.255.255.0 {
  range dynamic-bootp 192.168.2.32 192.168.2.254;
  option broadcast-address 192.168.2.255;
  option routers 192.168.2.1;
}

# 고정된 호스트들은 서로 다른 이름 도메인에 속하고
# 주소뿐 아니라 이름도 배정 받아야 한다.
group {
	option domain-name "apps.testnet.net";
	use-host-decl-names on;
	host guava {
		hardware ethernet 08:00:00:1a:2b:3c;
		fixed-address 192.168.2.16;
	}
	host nectarine {
		hardware ethernet 08:00:00:3b:4f:fa;
		fixed-address 192.168.2.17;
	}
	host banana {
		hardware ethernet 08:00:02:01:55:cb;
		fixed-address 192.168.2.18;
	}
}
고급 동적 설정 예제에서는 오직 적은 수의 설정 가능한 매개 변수만을 사용했다. 여러 종류의 컴퓨터와 운영 체제가 섞여 있는 복잡한 환경이라면, 보다 복잡한 설정을 필요로 한다. 만약 디스크가 없는 워크스테이션이 소량 혹은 다량으로 있다면, 다소 복잡한 설정을 만들 필요가 있다. 다음의 예제는 디스크가 없는 X11 워크스테이션의 집합이 있는 경우 사용하면 된다. 모든 워크스테이션에 공통인 정보는 group statement에 묶어서 넣고, 호스트마다 특별한 정보는 host statement에 넣는다. 이 예제가 보다 넓은 범위의 설정 자료를 워크스테이션에 전달하는 것을 알 수 있는데, 이 정보에는 시간, 글꼴, 디스플레이 관리자, 프린터, 그리고 NIS+ 서버의 주소가 포함되어 있다. 추가로 mango 워크스테이션은 IP 라우팅을 위해 설정되어 있고 정적 라우트로 설정되어 있다.

group {
  # 머신 부트 매개 변수
  filename "/tftp/fruit.boot";
  next-server guava.apps.testnet.net;

  # 애플리케이션 서버 매개 변수
  option ntp-servers 192.168.1.32;
  option x-display-manager 192.168.1.32, 192.168.2.32;
  option font-servers 192.168.1.32, 192.168.2.32;
  option lpr-servers 192.168.1.32;
  option nisplus-domain testnet;
  option nisplus-servers 192.168.1.32, 192.168.2.32;

  # 특정 워크스테이션에 대한 매개 변수
  host mango {
    hardware ethernet 08:00:02:30:02:ba;
    fixed-address 192.168.2.19;
    option ip-forwarding 1;
    option static-routes 10.1.0.1 192.168.2.1;
  }

  host passionfruit {
    hardware ethernet 08:00:a3:6c:0b:21;
    fixed-address 192.168.2.20;
  }
}
자세한 정보 자세한 설정 정보는 dhcpd.conf, dhcpd.lease, 그리고 dhcp-options 맨 페이지에서 찾아볼 수 있으며, Internet Software Consortium 웹사이트에서도 이용 가능하다.
테리 도슨(Terry Dawson)은 Linux Documentation Project에서 네트워크 관련 HOWTO 문서를 다수 저작했으며, 오라일리의 Linux Network Administrator"s Guide, 2nd Edition의 공동 저자이다. 다른 리눅스 프로젝트에도 적극적으로 참여하고 있다. 서성용님은 한빛 리포터 1기로 활동 중이며, 서울대학교 컴퓨터공학부 3학년에 재학중입니다. 현재 학부 체계 관리자 그룹 ACCESS의 UNIX Team Chief이며, 리눅스, 커널, 네트워크, 컴퓨터 아키텍처에 관심이 많다고 합니다.
TAG :
댓글 입력
자료실

최근 본 책0